package ali

import (
	"bytes"
	"errors"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"github.com/zeromicro/go-zero/core/logx"
	"time"
	"zero-cloud-disk/common"
)

func initOssClient() (*oss.Bucket, error) {
	// 阿里云账号AccessKey和AccessKeySecret
	accessKey := "LTAI5tPNotPXbxrFY4jvkmmD"
	accessSecret := "JEdM3L2OBdG82h9aqsccRQIV2yC9Xi"

	// OSS区域、Endpoint和Bucket名称 如果配置了 CDN加速就是用 CDN域名 没有配置就是用 申请的Bucket域名管理中的域名. 如果没有申请域名就是用 默认的外网 Endpoint(地域节点)
	endpoint := "oss-cn-beijing.aliyuncs.com"
	bucketName := "ycc-blog"

	// 创建OSS客户端
	client, err := oss.New(endpoint, accessKey, accessSecret)
	if err != nil {
		return nil, err
	}
	// 获取存储空间（Bucket）
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return nil, err
	}
	return bucket, nil
}

// UploadImageOss 上传阿里云oss
func UploadImageOss(data []byte, imageName string, prefix string) (filePath string, saveUrl string, err error) {
	q := common.Config.ALi

	if float64(len(data))/1024/1024 > float64(q.Size)/1024 {
		return "", "", errors.New("文件超过设定大小")
	}

	// 初始化OSS客户端
	bucket, err := initOssClient()
	if err != nil {
		logx.Error(err.Error())
		return "", "", err
	}

	// 文件名称
	key := fmt.Sprintf("%s%s", prefix, imageName)
	saveUrl = "cloud/" + key
	// 上传字节数组到OSS
	err = bucket.PutObject(saveUrl, bytes.NewReader(data))
	if err != nil {
		logx.Error(err.Error())
		return "", "", err
	}

	// 生成带签名的URL地址
	expiration := 24 * time.Hour // URL有效期为24小时
	_, err = bucket.SignURL(saveUrl, oss.HTTPGet, int64(expiration))
	if err != nil {
		logx.Error(err.Error())
		return "", "", err
	}
	return fmt.Sprintf("%s%s", q.CDN, saveUrl), saveUrl, nil
	//return signedUrl, nil
}
